<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 1.函数声明
        function f1(){
            console.log("f1");
        }

        // 2.函数表达式
        var f2=function(){
            console.log("f2")
        };

        // es6中新增了第三种函数定义方式
        // 箭头函数:ES6 允许使用“箭头”（ => ）定义表达式函数,本身是一个匿名函数,箭头函数只能使用表达式的方式来进行定义

        //定义一个无参的箭头函数
        let f3=()=>{
            console.log("我是函数f3");
        };
        f3();

        function f4(a){
            console.log("传入的参数",a)
        }
        f4(100);

        let f5=(a)=>{
            console.log("传入的参数",a);
        };
        f5(2000);
        //如果函数定义，有且只有一个参数时候，可以直接将箭头函数的形参的括号省略
        let f6=a=>{
            console.log("传入的参数",a);
        };
        f6(8);
        console.log("---------");
        //如果函数有且仅有一行返回值代码，可以省略箭头函数的函数体{}和return
        let f7=a=>{
            return a;
        };
        let f8=a=>a;
        console.log(f8(99));
        // 如果函数有且仅有一行代码，但是没有返回值，通过void关键字进行函数简化
        // void描述该函数没有返回值

        function f9(){
            console.log("hello");
        }
        let f10=()=>{
            console.log("hello");
        };
        let f11=()=>void console.log("哈哈哈");//标准语法
        f11();

        let f12=()=> console.log("xixixi");//非标准语法
        f12();

        // 如果函数中有且仅有一行，且需要返回一个对象数据
        function f13(){
            return {"name":"alice","age":20};
        }
        let f14=()=>{
            return {"name":"alice","age":20};
        };
        console.log(f14());

        let f15=()=>({"name":"alice","age":20});//需要加()括起来，表示{}为对象构建关键符号
        console.log(f15());

        let f16=(a,b)=>a+b;
        console.log(f16(100,200));
    </script>
</head>
<body>
    
</body>
</html>